#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QLabel>
#include <QMouseEvent>
#include <QNetworkAccessManager>
#include <QAction>
#include <QContextMenuEvent>
#include <QMenu>
#include <QNetworkReply>
#include <QMessageBox>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include <QString>
#include <QMap>
#include <QPainter>

#include "weatherdata.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

protected:
    void contextMenuEvent(QContextMenuEvent* event); // 重写父类上下文菜单事件方法，实现右键关闭窗口功能

    // 重写两个父类的鼠标事件，以实现窗口随鼠标移动的功能
    void mousePressEvent(QMouseEvent* event);
    void mouseMoveEvent(QMouseEvent* event);

    void getWeatherInfo(QString cityCode); // 通过9位城市编码获取该城市的天气数据，如北京:101010100

    void parseJson(QByteArray& byteArray); // 解析Json数据函数

    void updateUI(); //刷新界面

    // 重写父类eventfilter方法
    bool eventFilter(QObject* watched, QEvent* event);

    void paintHighCure();
    void paintLowCure();


private slots:
    void onReplied(QNetworkReply* reply);

    void on_btnSearch_clicked();

private:
    QMenu *mExitMenu; // 右键退出的菜单
    QAction *mExitAct; // 退出的行为 - 菜单项

    QPoint mOffset; // 窗口移动时，鼠标与窗口左上角的偏移

    QNetworkAccessManager* mNetAccessManager;

    Today mToday;
    Day mDay[6];

    //星期和日期
    QList<QLabel*> mWeekList;
    QList<QLabel*> mDateList;

    //天气和天气图标
    QList<QLabel*> mTypeList;
    QList<QLabel*> mTypeIconList;

    //天气污染指数
    QList<QLabel*> mAqiList;

    //风力和风向
    QList<QLabel*> mFxList;
    QList<QLabel*> mFlList;

    //图标
    QMap<QString, QString> mTypeMap;
};
#endif // MAINWINDOW_H
